package mybox.engine.rundfeder.junit;

import static java.lang.Math.*;

import java.io.IOException;
import java.util.ArrayList;

import mybox.engine.File4Qcad;
import mybox.engine.Line;
import mybox.engine.QVector;
import mybox.engine.ReferenceIOutput;
import mybox.engine.rundfeder.Ausnehmung;
import mybox.engine.rundfeder.Kurve;
import mybox.engine.rundfeder.Schnittpunkt;
import mybox.engine.rundfeder.Sector;
import mybox.engine.rundfeder.Ukulele;
import junit.framework.TestCase;

public class KurvenstueckTC extends TestCase{
	
	public void test_Sector() throws SecurityException, IOException {
		
		File4Qcad file4qcad = new File4Qcad(ReferenceIOutput.testoutputFile());
		QVector start= new QVector(0,0);	
			
		int anzahlSektoren=10000;
		double innerSektorBreite=1.5;
		double startPhi=0;
		double gesamtWinkel=2*PI/3;
		int clockwise=-1;
		
		
		Sector sector   = new Sector(file4qcad, start, anzahlSektoren, innerSektorBreite, startPhi, gesamtWinkel,clockwise);
				
		sector.draw();
		
		file4qcad.close();
		
		}
	
	public void test_Kurve() throws SecurityException, IOException {
		
		File4Qcad file4qcad = new File4Qcad(ReferenceIOutput.testoutputFile());
		QVector start= new QVector(0,0);	
		
		Kurve kurve = new Kurve();
		
		
		double startPhi=PI;
		double radius=70;
		double gesamtWinkel=2*PI/3;
		int clockwise=1;
		
		Sector sector1   = new Sector(
				             file4qcad, 
				             start, 
				             startPhi, 				              
				             radius, 
				             gesamtWinkel,
				             clockwise);
						
		kurve.addSector(sector1);
		
			
		startPhi=PI+0.2;
		gesamtWinkel=2*PI/3;
		radius=70;
		clockwise=-1;
		
		
		Sector sector2   = new Sector(
								 file4qcad, 
				                 sector1.end, 
				                 startPhi, 				                  
				                 radius, 
				                 gesamtWinkel,
				                 clockwise);
		
		kurve.addSector(sector2);
		
		Line[] linearr = new Line[1];
		linearr[0] = new Line(file4qcad,sector2.end,sector1.start);
		kurve.addLineArr(linearr);
		
		kurve.draw();
		file4qcad.close();
	}
			
	public void test_createUkulele() throws SecurityException, IOException {
		
		File4Qcad file4qcad = new File4Qcad(ReferenceIOutput.testoutputFile());
		QVector start= new QVector(0,0);
		
		Ukulele ukulele = new Ukulele(file4qcad, start);
		ukulele.draw();
		file4qcad.close();
		
	}
	
    public void test_ApproxiUkulele() throws SecurityException, IOException {
		
		File4Qcad file4qcad = new File4Qcad(ReferenceIOutput.testoutputFile());
		QVector start= new QVector(0,0);
		
		Ukulele ukulele = new Ukulele(file4qcad, start);	
		Line[] linearr = new Line[1];
		
		ArrayList<Schnittpunkt> schnittList = new ArrayList<Schnittpunkt>();
		schnittList.add(new Schnittpunkt(0,start));
		int schnittIdx=1;
		boolean farFromStart=false;
		double radius=5.2-(5.2-3.15149)/168;
		System.out.println("Radius="+radius);
		double letztesStueck=2*radius;	
		double zinkenTiefe=4;
		while ((schnittIdx<=2 || farFromStart )) {
			Schnittpunkt to =ukulele.findeForwardSchnittPunkt(schnittList.get(schnittIdx-1), radius);
			System.out.println("to="+to);
			schnittList.add(to);
			linearr[0] = new Line(file4qcad,schnittList.get(schnittIdx-1).ort,to.ort);
			if (schnittIdx % 2 ==0) {
			   Ausnehmung ausnehmung = new Ausnehmung(file4qcad,linearr[0],Ausnehmung.TO_RIGHT,zinkenTiefe);
				ukulele.cutLine.addLineArr(ausnehmung.ausArr);
			} else 	ukulele.cutLine.addLineArr(linearr);
			
			letztesStueck=QVector.diffEuklid(linearr[0].end, start);
			farFromStart=letztesStueck>=radius;
			schnittIdx++;
		}
		System.out.println("schnittIdx="+schnittIdx+" letztesStueck="+letztesStueck);
		radius=radius+letztesStueck/schnittIdx;
		
		
				
		
		//ukulele.draw();
		ukulele.drawCutline();
		file4qcad.close();
		
	}
	
	
	

}
